// 创建请求工具
const baseURL = 'http://localhost:8080/api'

// 请求拦截器
const request = (options) => {
  // 获取token
  const token = uni.getStorageSync('token')
  
  // 设置请求头
  const header = {
    'Content-Type': 'application/json',
    'X-Requested-With': 'XMLHttpRequest' 
  }
  
  // 如果有token，添加到请求头
  if (token) {
    header['auth'] = `Bearer ${token}`
  }
  
  // 打印完整请求信息
  console.log('完整请求信息:', {
    url: baseURL + options.url,
    method: options.method,
    data: options.data,
    header: options.header || header
  })
  
  // 发送请求
  return new Promise((resolve, reject) => {
    uni.request({
      url: baseURL + options.url,
      method: options.method || 'GET',
      data: options.data,
      header: options.header || header,
      success: (res) => {
        // 请求成功
        if (res.statusCode === 200) {
          // 如果直接返回布尔值，直接resolve
          if (typeof res.data === 'boolean') {
            console.log('收到布尔值响应:', res.data)  // 添加日志
            resolve(res.data)
            return
          }
          
          // 业务状态判断
          if (res.data.code === 200) {
            resolve(res.data)
          } else {
            // 业务错误
            uni.showToast({
              title: res.data.message || '请求失败',
              icon: 'none'
            })
            reject(res.data)
          }
        } else if (res.statusCode === 401) {
          // token失效，清除token并跳转登录
          uni.removeStorageSync('token')
          uni.removeStorageSync('userInfo')
          uni.showToast({
            title: '登录已过期，请重新登录',
            icon: 'none'
          })
          reject(res.data)
        } else {
          // 其他错误
          uni.showToast({
            title: '服务器错误',
            icon: 'none'
          })
          reject(res.data)
        }
      },
      fail: (err) => {
        uni.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
        console.error('请求失败详情:', {
          url: baseURL + options.url,
          method: options.method || 'GET',
          data: options.data,
          error: err
        })
        reject(err)
      }
    })
  })
}

export default request 